#include "ShareMemory.hpp"
#include <pthread.h>
void* run(void* args){
    std::cout << "我是线程: " << ToHex(pthread_self()) << " 我将在15秒后结束" << std::endl;
    sleep(15);
    std::cout << "我是线程: " << ToHex(pthread_self()) << " 我结束了" << std::endl;
    return (void*)10;
}
int main()
{
    Shm.CreateShm();
    Shm.ShmAt();
    // sleep(5);
    // std::cout << "self pid: " << getpid() << std::endl;
    Shm.SheMeta();
    // gpipe.OpenForRead();
    pthread_t pid;
    sleep(5);    
    pthread_create(&pid,nullptr,run,nullptr);
    std::cout <<  " pid: " << ToHex(pid) << std::endl;
    pthread_t* d = (pthread_t*)Shm.GetAddr();
    *d = pid;

    while(true){
        std::cout << "我已经给另一个进程，通过共享内存发送了pid" << std::endl;
        sleep(1);
    }
    // struct data* d= ( struct data*)Shm.GetAddr();
    // while(true){
    //     gpipe.Wait();
    //     printf("status: %s\n",d->status);
    //     printf("lastime: %s\n",d->lastime);
    //     printf("text: %s\n",d->text);
    //     strcpy(d->status,"已过期");
    //     // sleep(1);
    // }
    // char* strinfo = (char*)Shm.GetAddr();
    // while(true)
    // {
    //     printf("%s\n",strinfo);
    //     sleep(1);
    // }
    Shm.ShmDt();
    // sleep(10);
    Shm.DeleteShm();
    return 0;
}












// int main()
// {
//     key_t k = ::ftok(gpath.c_str(),gpro);
//     if (k < 0){
//         std::cerr << "ftok error" << std::endl;
//         return 1;
//     }
//     std::cout << "k: " << ToHex(k) << std::endl;
//     int shmid = ::shmget(k,4096,IPC_CREAT|IPC_EXCL|gmode);
//     if (shmid < 0){
//         std::cerr << "shmget error" << std::endl;
//         return 2;
//     }
//     std::cout << "shmget id: " << shmid << std::endl;
//     sleep(2);
//     //建立共享内存与进程地址空间的关联
//     void* ret = ::shmat(shmid,nullptr,0);
//     std::cout << "shmat done, ret: " << (long long)ret << std::endl;
//     sleep(3);


//     ::shmdt(ret);
//     std::cout << "shmshmdtat done"  << std::endl;
//     sleep(3);

//     //删除共享内存
//     ::shmctl(shmid,IPC_RMID,nullptr);
//     std::cout << "delete shm done"  << std::endl;
//     return 0;
// }